package main

import "fmt"

func main() {
	arr1 := [5]int{1, 2, 3, 4, 5}
	fmt.Println(arr1)
	fmt.Printf("%p\n", &arr1)

	p := &arr1
	fmt.Printf("p指针的类型%T\n", p)
	fmt.Printf("指针p的地址%p\n", &p) //指针也有地址

	//按照p的类型可以预先声明相同类型的变量来存储

	var pp *[5]int
	pp = &arr1

	fmt.Println(pp)  //&[1,2,3,4,5]代表的是数组指针
	fmt.Println(*pp) //加一个*就等于arr1相当于取地址所代表的值

	// 操作数组指针 来修改数组
	(*p)[0] = 100 // 原生写法
	fmt.Println("arr1:", arr1)
	fmt.Println("p1指向的地址的值: ", *p)

	// 语法糖：由于p1指向了arr1这个数组，所以可以直接用p1来操控数组
	// 指向了谁，这个指针就可以代表谁。
	// p1 = arr1==（*p1）
	p[0] = 200 // 在程序中，我们更多时候是这样在使用指针的
	fmt.Println("arr1:", arr1)
	fmt.Println("p1指向的地址的值: ", *p)

}
